/**
 * com.monte.persistence.PersistenceManager.java
 * create by FengMy from 2013
 */
package com.monte.persistence;

import java.util.List;

import javax.persistence.EntityManager;

/**
 * @描述:
 * @author FengMy
 * @since 2013-3-6
 */
public interface PersistenceManager {
	/**
	 * 新增实体
	 * @param entity
	 * @return
	 */
	public <T> T addEntity(T entity);
	
	/**
	 * 批量持久化新实体
	 * @param entities
	 * @return
	 */
	public <T> int addBatch(List<T> entities);
	
	/**
	 * 更新实体
	 * @param entity
	 */
	<T> T updateEntity(T entity);
	
	/**
	 * 批量更新实体
	 * @param entities
	 */
	<T> int updateBatch(List<T> entities);
	
	/**
	 * 删除实体
	 * @param entity
	 */
	<T> int deleteEntity(T entity);
	
	/**
	 * 删除实体
	 * @param entity
	 */
	<T> int deleteBatch(List<T> entities);
	
	/**
	 * 根据id获取实体
	 * @param <T>
	 * @param id
	 * @return
	 */
	<T> T getEntityById(Class<T> type,Object id);
	
	/**
	 * 执行命令
	 * @param command
	 * @return
	 */
	Object executeCommand(PersistenceCommand command);
	
	/**
	 * 获取JPA实体管理
	 * @return
	 */
	EntityManager getEntityManager();
}
